package com.bestcem.xm.label.dao.mapper;

import com.bestcem.xm.label.entity.mysql.LabelGroupEntity;
import com.bestcem.xm.label.service.dto.label.LabelInfoDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 标签组的Mapper
 *
 * @author zh.zhang <zh.zhang@idiaoyan.com>
 * @version v1.0
 * @date 2021-09-17
 */
@Mapper
public interface LabelGroupMapper {

    /**
     * 获取所有标签组下所有的标签信息
     *
     * @param orgId      机构id
     * @param memberType 联系人类型
     * @return List<LabelInfoDTO>
     */
    List<LabelInfoDTO> listLabels(@Param("orgId") String orgId, @Param("memberType") Integer memberType);

    /**
     * 根据 组织标识 和 标签组名称 统计数量
     *
     * @param orgId
     * @param labelGroupName
     * @return
     */
    Integer countByOrgIdAndName(@Param("orgId") String orgId, @Param("name") String labelGroupName);

    /**
     * 根据 组织标识 和 联系人类型 统计数量
     *
     * @param orgId
     * @param memberType
     * @return
     */
    Integer countByOrgIdAndMemberType(@Param("orgId") String orgId, @Param("memberType") Integer memberType);

    /**
     * 根据组织id获取标签组列表
     *
     * @param orgId
     * @return
     */
    List<LabelGroupEntity> findByOrgId(@Param("orgId") String orgId);

    /**
     * 创建 标签组
     *
     * @param toEntity
     */
    void saveLabelGroup(LabelGroupEntity toEntity);

    /**
     * 批量创建标签组
     *
     * @param labelGroupEntities 标签组集合
     */
    void batchCreate(List<LabelGroupEntity> labelGroupEntities);

    /**
     * 根据id获取数据
     *
     * @param id
     * @return
     */
    LabelGroupEntity findById(@Param("id") String id);

    /**
     * 根据id 更新名称
     *
     * @param name
     * @param id
     * @param updateTime
     */
    void updateNameById(@Param("name") String name, @Param("id") String id, @Param("updateTime") Date updateTime);

    /**
     * 根据 id 删除 标签组
     *
     * @param id
     * @return
     */
    int deleteById(@Param("id") String id);

    /**
     * 根据组织id 和  标签组名称 获取数据
     *
     * @param orgId
     * @param name
     * @return
     */
    LabelGroupEntity findByOrgIdAndName(@Param("orgId") String orgId, @Param("name") String name);

    /**
     * 批量保存sample数据
     *
     * @param labelGroupEntities
     */
    void batchSaveSampleData(@Param("list") List<LabelGroupEntity> labelGroupEntities);

    /**
     * 批量创建数据
     *
     * @param labelGroupEntities
     */
    void batchSaveLabelGroups(@Param("list") List<LabelGroupEntity> labelGroupEntities);
}
